package com.eventos;

import java.util.Date;
import java.util.Locale;
import java.sql.Time;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;


import com.clientes.ActivityLogin;
import com.clientes.FavoritosBean;
import com.clientes.GestorEventoFavoritos;
import com.clientes.GestorRating;
import com.clientes.GestorWish;
import com.clientes.RatingBean;
import com.clientes.WishListBean;
import com.eventssmartphone.AnalyticsManager;
import com.eventssmartphone.AplicacionEvents;
import com.eventssmartphone.ImageDownloader;
import com.eventssmartphone.R;


import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;

import java.text.DateFormatSymbols;

import com.eventssmartphone.JSONReaderListener;
import org.json.JSONArray;

public class ActivityVerEvento extends Activity implements OnClickListener, OnRatingBarChangeListener, JSONReaderListener,  DialogInterface.OnClickListener{
	ImageButton ptsventa;
	TextView zonas;
	ImageButton mapa;
	DetalleEventoBean evento =null;
	
	ImageView imgEvento;
	TextView txt_nombre_evento;
	TextView txt_tipo_evento;
	TextView txt_descr_evento;
	TextView txt_amb_evento;
	TextView txt_serv_evento;
	TextView txt_venta;
	TextView txt_evento;
	ImageButton wish;
	ImageButton favoritos;
	TextView txt_puntaje;
	
	//cristian
	int idusuario=0;
	Boolean favoritoBool=false;
	int respuesta=-1;
	int respuesta2=-1;	
	
	boolean parteCristian1=false;

	boolean parteCristian2=false;
	
	//
	
	//marga
		RatingBar rating;
		TextView ratingText;
		Integer ratingBool=0;  // 0: falso, 1: true 2: msgbox
	//Marga
		
	boolean parteJusfral=false;
	boolean parteMarga=false;
	
	private static int idEvento=0;
	private final ImageDownloader imgDownloader = new ImageDownloader();
	
	ProgressDialog myProgressDialog = null;
	
	/**
	 * //@see android.app.Activity#onCreate(Bundle)
	 */
	//@Override
	protected void onCreate(Bundle savedInstanceState) {
		try{

			
			super.onCreate(savedInstanceState);
			setContentView(R.layout.ev_verevento);
			int j=1;
					
			Bundle b = getIntent().getExtras();
			idEvento = b.getInt("idEvento");
			
			Log.i("evento","Este es el evento "+idEvento);
			
			Log.i("aviso","Aviso "+j);
			j++;
					
			SimpleDateFormat formatoDMY = new SimpleDateFormat("dd MMM yyyy");
			SimpleDateFormat formatoHM = new SimpleDateFormat("hh:mm");
					
			ptsventa = (ImageButton)findViewById(R.id.carrito);        
	        ptsventa.setOnClickListener(this);
	
	        mapa = (ImageButton)findViewById(R.id.googlemaps);        
	        mapa.setOnClickListener(this);
	        zonas = (TextView)findViewById(R.id.lbl_amb_evento);        
	        zonas.setOnClickListener(this);
	        
	        txt_nombre_evento = (TextView)findViewById(R.id.txt_nombre_evento);
	        txt_tipo_evento = (TextView)findViewById(R.id.txt_tipo_evento);
	        txt_descr_evento = (TextView)findViewById(R.id.txt_descr_evento);
	        txt_amb_evento = (TextView)findViewById(R.id.txt_amb_evento);
	        
	        imgEvento = (ImageView)findViewById(R.id.imgEvento);
	        txt_serv_evento = (TextView)findViewById(R.id.txt_serv_evento);
	        txt_venta = (TextView)findViewById(R.id.txt_venta);
	        txt_puntaje = (TextView)findViewById(R.id.puntaje);
	        
	        wish=(ImageButton)findViewById(R.id.wishList); 
	        wish.setOnClickListener(this);
	        
	        favoritos=(ImageButton)findViewById(R.id.favoritos);    
	        favoritos.setOnClickListener(this);
	        txt_evento = (TextView)findViewById(R.id.txt_evento);
	            
	        Log.i("wachu","wachuwa1");
	        
	      //Marga
	        ratingText=(TextView)findViewById(R.id.calificaevento);// create TextView object
	        rating=(RatingBar)findViewById(R.id.ratingBar);// create RatingBar object
			rating.setOnRatingBarChangeListener(this);
	        
	        parteMarga=false;
        	parteJusfral=true;
	    
        	
			//Marga
			
			Log.i("FINAL","Despues de marga");
	    
        	
        	
        	
        	GestorDetalleEvento.getInstance().dameDetalleEvento(idEvento,this);
	        
	        
	        //cristian
        	  
	        AplicacionEvents myaplicacion = (AplicacionEvents)this.getApplication();
	       idusuario=Integer.valueOf(myaplicacion.getIdUsuario());
	              //cristian
	   
	        
	        
	        
	        
		    
	        
        
		}catch(Exception e){
			
			e.printStackTrace();
			
		}
	}
	
	
	public void onClick(View v) {
		// TODO Auto-generated method stub
		
		
		if (v.getId() == R.id.carrito){
		
			Intent intent = new Intent(ActivityVerEvento.this, ActivityVerPuntosVenta.class);
			Bundle b = new Bundle();
			b.putInt("Evento", idEvento); 
			intent.putExtras(b); 
			startActivity(intent);
						
		}
		
		else if (v.getId() == R.id.lbl_amb_evento){
			
			
			Intent intent = new Intent(ActivityVerEvento.this, ActivityVerMapa.class);
			Bundle b = new Bundle();
			b.putInt("Evento", idEvento); 
			intent.putExtras(b); 
			startActivity(intent);
			
		}
		
		else if (v.getId() == R.id.flecha){
			
			
			Intent intent = new Intent(ActivityVerEvento.this, ActivityVerMapa.class);
			Bundle b = new Bundle();
			b.putInt("Evento", idEvento); 
			intent.putExtras(b); 
			startActivity(intent);
			
			
		}

		
		else if (v.getId() == R.id.googlemaps){
			
			Log.i("aviso","antes de dar clic, idEvento: "+idEvento);
			Intent intent = new Intent(ActivityVerEvento.this, ActivityRutaEvento.class);
			Bundle b = new Bundle();
			b.putInt("Evento", idEvento); 
			intent.putExtras(b); 
			startActivity(intent);
		}
		
		else if (v.getId() == R.id.favoritos){
			
			AplicacionEvents aplicacion = (AplicacionEvents)this.getApplication();
        	
        	if (aplicacion.getUsuarioEvents() == true){ 
	        try {
	        	 parteMarga=false;
			        parteJusfral=false;
			        parteCristian1=false;
	        	parteCristian2=true;
	        	Log.i("cristian", "user:"+idusuario+"--evento:"+idEvento);
	        	GestorEventoFavoritos.getInstance().dameFavoritoJson(this,idusuario, idEvento);
			    	
	        } catch (Exception e) {
	        	Toast.makeText(this, "Error. Revise su conexión a Internet.", Toast.LENGTH_SHORT).show();
	        } }else {
				favoritos.setEnabled(false);
				Toast.makeText(this,"Para registrar eventos como favoritos debe registrarse como usuario de E-vents", Toast.LENGTH_SHORT).show();
			}
			
			}
		
		else if (v.getId() == R.id.wishList){
			
			
			

	        try {

	        	parteMarga=false;
		        parteJusfral=false;
		        parteCristian2=false;
        	parteCristian1=true;
        	Log.i("cristian", "user:"+idusuario+"--evento:"+idEvento);
        	GestorWish.getInstance().dameFavoritoJson(this, idusuario, idEvento);
        	
	        } catch (Exception e) {
	        	Toast.makeText(this, "Error. Revise su conexión a Internet.", Toast.LENGTH_SHORT).show();
	        }
	        
		}
					
			
		
		
	}
	
	public ImageDownloader getImageDownloader() {
        return imgDownloader;
    }


	//@Override
	public void onConnected() {
		// TODO Auto-generated method stub
		myProgressDialog = ProgressDialog.show(this, "Cargando...", "Por favor esperar...", true);
	}


	//@Override
	public void onSent() {
		// TODO Auto-generated method stub
		myProgressDialog.setMessage("Procesando datos...");
	}


	//@Override
	public void onFinished(JSONArray jArray) {
		// TODO Auto-generated method stub
		try { 
			Locale peru = new Locale("es_ES");
	        DateFormatSymbols dfs=new DateFormatSymbols(peru);
			
	        if(jArray==null){
				
				Toast.makeText(this, "El evento solicitado no existe.", Toast.LENGTH_SHORT).show();
				return;
			}
	        
	        
	        if(parteJusfral){
	        	
	        	evento = GestorDetalleEvento.getInstance().procesarDameDetalleEvento(jArray, idEvento);
	        	
	        	if(evento==null){
					Toast.makeText(this, "El evento solicitado no existe.", Toast.LENGTH_SHORT).show();
					return;
				}
	        	
				
	        	AnalyticsManager analytics = new AnalyticsManager(this.getBaseContext(),((AplicacionEvents)this.getApplication()).getUACode());
				analytics.registerPage(evento.getEvento(),((AplicacionEvents)this.getApplication()).getEventSource());
	        	
				txt_nombre_evento.setText(evento.getEvento());
				txt_tipo_evento.setText(evento.getTipoEvento());
				txt_descr_evento.setText(evento.getDescripcion());
				txt_amb_evento.setText(evento.getAmbiente());
				
				Double puntaje=evento.getRating();
				if(puntaje==-1){
					txt_puntaje.setText("--");
				}
				else{
					DecimalFormat df = new DecimalFormat("#.#");
					txt_puntaje.setText(df.format(evento.getRating()));	
				}
				
				
				String imagen=evento.getUrlImagen();
				if(imagen==""){
					
				}
				else{
					imgDownloader.download(evento.getUrlImagen(),imgEvento);
				}
				
				String strServicios = "";
				ArrayList<ServicioBean> arrServicios=evento.getServicios();
				String nomServicio="";
				
				if(arrServicios==null) strServicios="Este evento no contiene servicios";
				else{
				    for(int i=0;i<arrServicios.size();i++){
				    	nomServicio=arrServicios.get(i).getNombre();
				    	if(nomServicio=="") continue;
				    	strServicios+="- "+arrServicios.get(i).getNombre()+"\n";
				    }
				}
				txt_serv_evento.setText(strServicios);
				
				Date fechaVentaIni = evento.getFechaInicio();
				Date fechaVentaFin = evento.getFechaFin();
				
				if(fechaVentaIni==null){
					txt_venta.setText("Este evento no tiene fechas de venta");
				}
				else{
					txt_venta.setText("Del "+fechaVentaIni.getDate()+" de "+dfs.getMonths()[fechaVentaIni.getMonth()] +" al "+fechaVentaFin.getDate()+ " de " +dfs.getMonths()[fechaVentaFin.getMonth()]);
				}
				
				String strHorarios="";
				ArrayList<HorarioBean> arrHorarios= evento.getHorarios();        
				Date fecha;
				Date horaIni;
				Date horaFin;
				int dia;
				
				if (arrHorarios==null){
					strHorarios="Este evento no contiene horarios";
				}
				else{
				
				    for(int i=0;i<arrHorarios.size();i++){
				    	
				    	fecha = arrHorarios.get(i).getFecha();
				    	horaIni = arrHorarios.get(i).getHora_ini();
				    	horaFin = arrHorarios.get(i).getHora_fin();
				    	dia=arrHorarios.get(i).getDia();
				    	
				    	if(fecha==null){
				    		continue;
				    	}
				    	else{
				    		strHorarios += "El "+dfs.getWeekdays()[dia] +" "+fecha.getDate()+" de "+ dfs.getMonths()[fecha.getMonth()]+ " ";
				        	if(arrHorarios.size()==1) strHorarios+=" (Fecha Única)";
				        	strHorarios+="\nDesde "+horaIni.getHours()+":"+horaIni.getMinutes() +" hrs hasta " +horaFin.getHours()+":"+horaFin.getMinutes()+" hrs.\n\n";
				    	}
				    
				    }
					
				}
				txt_evento.setText(strHorarios);
				
				//Toast.makeText(this, "Aqui debe borrarlo", Toast.LENGTH_LONG).show();
				
				
				myProgressDialog.dismiss();
				
				try {
		        	AplicacionEvents aplicacion = (AplicacionEvents)this.getApplication();
		        	
		        	Log.i("rating", "try de activity");
		        	if (aplicacion.getUsuarioEvents() == true){
		        	
			        	int idUsuario;
			        	parteCristian1=false;

				        parteCristian2=false;
			        	parteMarga=true;
			        	parteJusfral=false;
			        	
			        	
			        	
			        	try{
			        		idUsuario=Integer.valueOf(aplicacion.getIdUsuario());
			        	}
			        	catch(Exception ex){
			        		idUsuario=-1;
			        	}
			        	
			        	if(idUsuario>=0){
			        	
			        		GestorRating.getInstance().dameRatingJson(this, Integer.valueOf(aplicacion.getIdUsuario()), idEvento);
			        	
			        	}
			        	else{
			        		
			        	
			        	}
			        	
			        	Log.i("rating", "try if");
		        	} else{
		        		//rating.setEnabled(false);
		        		
		        		Log.i("rating", "try else");
		        	}
		        	 
		        	
		        } catch (Exception e) {
		        	e.printStackTrace();
		        	Toast.makeText(this, "Error. Revise su conexión a Internet.", Toast.LENGTH_SHORT).show();
		        }

	        }
	        else if(parteMarga){
	        
	        	int rating = GestorRating.getInstance().procesarDameRating(jArray);			
				
				// Marga
				Log.i("rating", "desdepues de gestor");
				if (rating!=-1) {
					this.ratingBool = 1;
					this.rating.setRating(rating);
					this.rating.setEnabled(false);
					Log.i("rating", "en if");
				}
				//Marga
				parteCristian1=false;

		        parteCristian2=false;
				
			        
		        parteMarga=false;
		        parteJusfral=false;
		        
		        myProgressDialog.dismiss();
		        
	        	
	        }
	        			


	        else if ( parteCristian1){
	        	 parteMarga=false;
			        parteJusfral=false;
			       parteCristian1=true;
			       parteCristian2=false;
			       try{
			       respuesta2= GestorWish.getInstance().procesarDameFavorito(jArray);
			       }
			       catch (Exception e) {
			    	   myProgressDialog.dismiss();
				        
			    	   // TODO: handle exception
				}
			       
			       
			       

					//Log.i("wish","aki");
					//Log.i("wish",respuesta2+"");
					if (respuesta2==0) {
						WishListBean miwashin = new WishListBean(idusuario, idEvento);
						favoritoBool=miwashin.RegistrarWishList();
						Log.i("wish", "sali");
			       
						Toast.makeText(this, "Evento agregado a WishList", Toast.LENGTH_LONG).show();
						
				        parteMarga=false;
				        parteJusfral=false;
				        parteCristian2=false;
				        parteCristian1=false;
				        myProgressDialog.dismiss();
				        
				        
					}
					
					else {
						myProgressDialog.dismiss();
						this.wish.setEnabled(false);  
						Toast.makeText(this, "El Evento ya ha sido agregado al WishList", Toast.LENGTH_LONG).show();
						
					}
					
					
					
					
        	//parteJusfral=true;)
			//EventoAdapter adapter = new EventoAdapter(listaEventos, this);
			//lista.setAdapter(adapter);
			//lista.setOnItemClickListener(this);
	        }
	        else if ( parteCristian2){
	        	 parteMarga=false;
			        parteJusfral=false;
			       parteCristian1=false;
			       parteCristian2=true;
			       
			       try{
			       respuesta= GestorEventoFavoritos.getInstance().procesarDameFavorito(jArray);			       }
			       catch (Exception e) {
			    	   myProgressDialog.dismiss();
				        // TODO: handle exception
				}
			       
			       
			       

					//Log.i("favo","aki");
					//Log.i("favo",respuesta+"");
					if (respuesta==0) {
						FavoritosBean mifav = new FavoritosBean(idusuario, idEvento);
						favoritoBool=mifav.RegistrarWishList();
						Log.i("favo", "sali");
				
						Toast.makeText(this, "Evento agregado a Favoritos", Toast.LENGTH_LONG).show();
						
				        parteMarga=false;
				        parteJusfral=false;
				        parteCristian1=false;

				        parteCristian2=false;
				        myProgressDialog.dismiss();
				        
				        
					}
					
					else {
						myProgressDialog.dismiss();
						this.favoritos.setEnabled(false);  
						Toast.makeText(this, "El Evento ya ha sido agregado a Favoritos", Toast.LENGTH_LONG).show();
						
					}}
	        
			//EventoAdapter adapter = new EventoAdapter(listaEventos, this);
			//lista.setAdapter(adapter);
			//lista.setOnItemClickListener(this);
			
			
		} catch (Exception e){
	        	e.printStackTrace();
				Toast.makeText(this, "Error. Revise su conexión a Internet.", Toast.LENGTH_SHORT).show();
	        	
			}  
			
		
	}


	//@Override
	public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
		// TODO Auto-generated method stub
		AplicacionEvents aplicacion = (AplicacionEvents)this.getApplication();
    	
    	if (aplicacion.getUsuarioEvents() == true){ 			
		
		//Toast.makeText(this, "New Rating: " + rating, Toast.LENGTH_SHORT).show();
		if (ratingBool == 1){
			Toast.makeText(this, "Usted ya califico el evento", Toast.LENGTH_SHORT).show();
		} else if (ratingBool == 0) {
		//MESSAGEBOX	
				this.rating = ratingBar;
			    AlertDialog.Builder dlgAlert  = new AlertDialog.Builder(this);                      
			    dlgAlert.setTitle("E-vents - Rating"); 
			    dlgAlert.setMessage("¿Está seguro que desea asignar " + String.valueOf((int)rating) + " estrellas al evento?"); 
			    dlgAlert.setPositiveButton("OK",this); 
			    dlgAlert.setNegativeButton("Cancelar", this);    
			    		
			    dlgAlert.setCancelable(true);
			    dlgAlert.create().show();
			
		//MESSAGEBOX
		} else if (ratingBool == 2) {
			ratingBool = 0;
		}
		} else {
			
			this.rating.setEnabled(false);
    		Toast.makeText(this, "Para registrar el rating de una evento debe registrarse como usuario E-vents", Toast.LENGTH_SHORT).show();
    		this.rating.setRating(0);
		}
	}


	//@Override
	public void onClick(DialogInterface dialog, int which) {
		// TODO Auto-generated method stub
		if (which == dialog.BUTTON_POSITIVE){
			AplicacionEvents aplicacion = (AplicacionEvents)this.getApplication();
    		
    		RatingBean ratingBean = new RatingBean(Integer.valueOf(aplicacion.getIdUsuario()), idEvento);
    		if (ratingBean.RegistrarRating((int)rating.getRating())){
    			this.rating.setEnabled(false);
    			Toast.makeText(this, "Evento agregado", Toast.LENGTH_LONG).show();
    			
    			}
    			
    			else {

    				Toast.makeText(this, "No se pudo agregar", Toast.LENGTH_LONG).show();
    			}
		} else if (which == dialog.BUTTON_NEGATIVE) {
			ratingBool = 2;
			rating.setRating(0);
		}
	}
}
